import Vue from 'vue'
import Vuex from 'vuex'
import a from './a'
import axios from 'axios'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    num:10,
    list:[{age:10},{age:15},{age:20},{age:25}],
    message:'我是当前模块的message',
    mm:''
  },
  getters: {
    getNum(state){
       return state.num*state.num   //第一个参数获取state的数据
    },
    getAge(state){
        
        return  state.list.filter(item=>item.age>15)
    },
    a(){
        return '我是a的计算属性结果'
    },
    getAgeLen(state,getters,rootState,rootGetters){
        //第二个参数表示当前模块的getters对象
        console.log(getters);
        console.log(rootState,'rootState');//默认获取当前模块（主模块）的state的数据
        console.log(rootState.a,'a模块');//获取a模块的state数据
        console.log(rootGetters,'rootGetters');//默认获取当前模块（主模块）的getters对象
        console.log(rootGetters['a/total']); //获取其他模块的方法  rootGetters['模块名/子模块的getters方法']
        console.log(rootGetters['a/moduleA']); 
        return getters.getAge.length

    },
    filterLen(state){
        // getters 传递参数的时候 一定要让getters方法本身返回一个函数，age就是传递过来的参数
        return age=>{
            return state.list.filter(item=>item.age>age)
        }
    }
    // getter的方法四个参数
    // state:当前模块中的state
    // getters：当前模块的getters对象，一般用于操作同级的方法
    // rootState：默认获取当前模块（主模块）的state的数据  获取其他子模块 rootState.模块名 (获取到子模块的state)
    // rootGetters：默认获取当前模块（主模块）的getters对象，获取其他模块的getters里面方法  rootGetters['模块名/子模块的getters方法']

  },
  mutations: {
    setList(state,data){
        state.mm = data

    }
  },
  actions: {
    // actions里面的方法 第一个参数是 context context是指vuex的上下文，也就是vuex的整个环境,第二个参数接受dispatch传过来的参数
    getList(context,data){
        console.log(context);
        console.log(data,'actions方法参数');
        axios.get('a.json').then(res=>{
            console.log(res);
            context.commit('setList',res.data.list)
        })
    }
  },
  modules: {
    a:a
  }
})
